OAuth2 ile güvenli ve sorunsuz kullanıcı kimlik doğrulamasının kilidini açın. Bu kılavuz, üçüncü taraf erişimi için OAuth2 uygulamasına ilişkin kavramları, iş akışlarını ve pratik hususları kapsar.
OAuth2 Uygulaması: Üçüncü Taraf Kimlik Doğrulamasına Kapsamlı Bir Rehber
Günümüzün birbirine bağlı dijital ortamında, sorunsuz ve güvenli kullanıcı kimlik doğrulaması çok önemlidir. OAuth2, üçüncü taraf uygulamaların, kimlik bilgilerini ifşa etmeden farklı bir hizmetteki kullanıcı kaynaklarına erişmesini sağlamak için endüstri standardı protokolü olarak ortaya çıkmıştır. Bu kapsamlı kılavuz, OAuth2 uygulamasının inceliklerini inceleyerek, geliştiricilere bu güçlü yetkilendirme çerçevesini uygulamalarına entegre etmek için gereken bilgi ve pratik rehberliği sağlar.
OAuth2 Nedir?
OAuth2 (Açık Yetkilendirme), bir üçüncü taraf uygulamasının, bir kullanıcı adına bir HTTP hizmetine sınırlı erişim elde etmesini sağlayan bir yetkilendirme çerçevesidir; bu, kullanıcının onayını düzenleyerek veya üçüncü taraf uygulamasının kendi adına erişim elde etmesine izin vererek yapılır. OAuth2, web uygulamaları, masaüstü uygulamaları, cep telefonları ve oturma odası cihazları için belirli yetkilendirme akışları sağlarken istemci geliştirici basitliğine odaklanır.
Bunu vale park hizmeti gibi düşünün. Araba anahtarlarınızı (kimlik bilgilerini) güvenilir bir vale (üçüncü taraf uygulama) görevlisine verirsiniz, böylece arabanızdaki diğer her şeye doğrudan erişim vermeniz gerekmeden arabanızı (kaynaklarınıza erişin) park edebilirler. Kontrolü elinizde tutarsınız ve her zaman anahtarlarınızı geri alabilirsiniz (erişimi iptal edebilirsiniz).
OAuth2'deki Temel Kavramlar
OAuth2'nin temel kavramlarını anlamak, başarılı bir uygulama için çok önemlidir:
- Kaynak Sahibi: Korumalı bir kaynağa erişim izni verebilen varlık. Tipik olarak bu, son kullanıcıdır.
- Kaynak Sunucusu: Korumalı kaynakları barındıran ve erişim belirteçlerini kullanarak korumalı kaynak isteklerini kabul eden ve yanıtlayan sunucu.
- İstemci Uygulaması: Kaynak sahibi adına korumalı kaynaklara erişim isteyen uygulama. Bu bir web uygulaması, bir mobil uygulama veya bir masaüstü uygulaması olabilir.
- Yetkilendirme Sunucusu: Kaynak sahibini başarıyla kimlik doğruladıktan ve yetkilendirmesini aldıktan sonra istemci uygulamasına erişim belirteçleri veren sunucu.
- Erişim Belirteci: Kaynak sahibi tarafından istemci uygulamasına verilen yetkilendirmeyi temsil eden bir kimlik bilgisi. İstemci uygulaması tarafından kaynak sunucusundaki korumalı kaynaklara erişmek için kullanılır. Erişim belirteçlerinin tipik olarak sınırlı bir ömrü vardır.
- Yenileme Belirteci: Kaynak sahibinin istemci uygulamasını yeniden yetkilendirmesini gerektirmeden yeni bir erişim belirteci almak için kullanılan bir kimlik bilgisi. Yenileme belirteçleri tipik olarak uzun ömürlüdür ve güvenli bir şekilde saklanmalıdır.
- Kapsam: İstemci uygulamasına verilen belirli izinleri tanımlar. Örneğin, bir istemci uygulamasına bir kullanıcının profiline salt okunur erişim verilebilir, ancak onu değiştirme yeteneği verilmez.
OAuth2 Yetkilendirme Türleri
OAuth2, her biri belirli kullanım durumlarına ve güvenlik gereksinimlerine göre uyarlanmış çeşitli yetkilendirme türleri tanımlar. Uygun yetkilendirme türünü seçmek, güvenli ve kullanıcı dostu bir kimlik doğrulama deneyimi sağlamak için çok önemlidir.
1. Yetkilendirme Kodu Yetkilendirmesi
Yetkilendirme kodu yetkilendirmesi, web uygulamaları için en sık kullanılan ve önerilen yetkilendirme türüdür. İstemci gizli dizisinin kaynak sahibinin tarayıcısına hiçbir zaman ifşa edilmemesini sağlayan çok adımlı bir işlem içerir. Gizli istemcilerle (istemci gizli dizilerinin gizliliğini koruyabilen istemciler) kullanım için tasarlanmıştır. İşte basitleştirilmiş bir dökümü:
- İstemci uygulaması, kaynak sahibini yetkilendirme sunucusuna yönlendirir.
- Kaynak sahibi, yetkilendirme sunucusunda kimliğini doğrular ve istemci uygulamasına izin verir.
- Yetkilendirme sunucusu, kaynak sahibini bir yetkilendirme koduyla istemci uygulamasına geri yönlendirir.
- İstemci uygulaması, yetkilendirme kodunu bir erişim belirteci ve bir yenileme belirteciyle değiştirir.
- İstemci uygulaması, kaynak sunucusundaki korumalı kaynaklara erişmek için erişim belirtecini kullanır.
Örnek: Bir kullanıcı, Google Drive hesabını üçüncü taraf bir belge düzenleme uygulamasına bağlamak istiyor. Uygulama, kullanıcıyı Google'ın kimlik doğrulama sayfasına yönlendirir; burada kullanıcı oturum açar ve uygulamaya Google Drive dosyalarına erişme izni verir. Google daha sonra kullanıcıyı bir yetkilendirme koduyla uygulamaya geri yönlendirir ve uygulama bunu bir erişim belirteci ve yenileme belirteciyle değiştirir.
2. Örtük Yetkilendirme
Örtük yetkilendirme, istemci gizli dizisini güvenli bir şekilde saklayamayan istemci uygulamaları için tasarlanmış, yetkilendirme kodu yetkilendirmesinin basitleştirilmiş bir sürümüdür; örneğin, bir web tarayıcısında veya yerel mobil uygulamalarda çalışan tek sayfalı uygulamalar (SPA'lar). Bu yetkilendirme türünde, erişim belirteci, kaynak sahibi yetkilendirme sunucusunda kimliğini doğruladıktan sonra doğrudan istemci uygulamasına döndürülür. Ancak, erişim belirteci yakalama riski nedeniyle yetkilendirme kodu yetkilendirmesinden daha az güvenli kabul edilir.
Önemli Not: Örtük Yetkilendirme artık büyük ölçüde kullanımdan kaldırılmış olarak kabul ediliyor. Güvenlik en iyi uygulamaları, SPA'lar ve yerel uygulamalar için bile bunun yerine PKCE (Kod Değişimi için Kanıt Anahtarı) ile Yetkilendirme Kodu Yetkilendirmesini kullanmanızı önerir.
3. Kaynak Sahibi Parola Kimlik Bilgileri Yetkilendirmesi
Kaynak sahibi parola kimlik bilgileri yetkilendirmesi, istemci uygulamasının kaynak sahibinin kullanıcı adını ve parolasını doğrudan yetkilendirme sunucusuna sağlayarak bir erişim belirteci almasına olanak tanır. Bu yetkilendirme türü, yalnızca istemci uygulamasına son derece güvenildiğinde ve kaynak sahibiyle doğrudan bir ilişkisi olduğunda kullanılmalıdır. Kimlik bilgilerini doğrudan istemci uygulamasıyla paylaşmanın güvenlik riskleri nedeniyle genellikle önerilmez.
Örnek: Bir banka tarafından geliştirilen birinci taraf bir mobil uygulama, kullanıcıların hesaplarına erişmesine izin vermek için bu yetkilendirme türünü kullanabilir. Ancak, üçüncü taraf uygulamaların genellikle bu yetkilendirme türünden kaçınması gerekir.
4. İstemci Kimlik Bilgileri Yetkilendirmesi
İstemci kimlik bilgileri yetkilendirmesi, istemci uygulamasının bir kaynak sahibi adına hareket etmek yerine kendi kimlik bilgilerini (istemci kimliği ve istemci gizli dizisi) kullanarak bir erişim belirteci almasına olanak tanır. Bu yetkilendirme türü, tipik olarak sunucudan sunucuya iletişim için veya istemci uygulamasının doğrudan sahip olduğu kaynaklara erişmesi gerektiğinde kullanılır.
Örnek: Bir bulut sağlayıcısından sunucu ölçümlerine erişmesi gereken bir izleme uygulaması bu yetkilendirme türünü kullanabilir.
5. Yenileme Belirteci Yetkilendirmesi
Yenileme belirteci yetkilendirmesi, istemci uygulamasının bir yenileme belirtecini kullanarak yeni bir erişim belirteci almasına olanak tanır. Bu, istemci uygulamasının, kaynak sahibinin uygulamayı yeniden yetkilendirmesini gerektirmeden korumalı kaynaklara erişimi sürdürmesini sağlar. Yenileme belirteci, yeni bir erişim belirteciyle ve isteğe bağlı olarak yeni bir yenileme belirteciyle değiştirilir. Eski erişim belirteci geçersiz kılınır.
OAuth2 Uygulaması: Adım Adım Kılavuz
OAuth2 uygulaması çeşitli önemli adımlar içerir:
1. İstemci Uygulamanızı Kaydetme
İlk adım, istemci uygulamanızı yetkilendirme sunucusuna kaydetmektir. Bu, tipik olarak uygulama adı, açıklaması, yönlendirme URI'leri (yetkilendirme sunucusunun, kimlik doğrulamasından sonra kaynak sahibini yönlendireceği yer) ve istenen yetkilendirme türleri gibi bilgilerin sağlanmasını içerir. Yetkilendirme sunucusu daha sonra uygulamanızı tanımlamak ve kimliğini doğrulamak için kullanılacak bir istemci kimliği ve bir istemci gizli dizisi yayınlayacaktır.
Örnek: Uygulamanızı Google'ın OAuth2 hizmetine kaydederken, uygulamanızın yetkilendirme kodunu almak için kullanacağı URI ile eşleşmesi gereken bir yönlendirme URI'si sağlamanız gerekecektir. Ayrıca, uygulamanızın Google Drive veya Gmail'e erişim gibi gerektirdiği kapsamları da belirtmeniz gerekecektir.
2. Yetkilendirme Akışını Başlatma
Bir sonraki adım, yetkilendirme akışını başlatmaktır. Bu, kaynak sahibini yetkilendirme sunucusunun yetkilendirme uç noktasına yönlendirmeyi içerir. Yetkilendirme uç noktası tipik olarak aşağıdaki parametreleri gerektirecektir:
client_id: Yetkilendirme sunucusu tarafından verilen istemci kimliği.redirect_uri: Yetkilendirme sunucusunun, kimlik doğrulamasından sonra kaynak sahibini yönlendireceği URI.response_type: Yetkilendirme sunucusundan beklenen yanıtın türü (örneğin, yetkilendirme kodu yetkilendirmesi içincode).scope: İstenen erişim kapsamları.state: Siteler arası istek sahteciliğini (CSRF) önlemek için kullanılan isteğe bağlı bir parametre.
Örnek: Bir yönlendirme URI'si şuna benzeyebilir: https://example.com/oauth2/callback. state parametresi, uygulamanızın yetkilendirme sunucusundan gelen yanıtın meşru olduğunu doğrulamak için kullanabileceği rastgele oluşturulmuş bir dizedir.
3. Yetkilendirme Yanıtını İşleme
Kaynak sahibi yetkilendirme sunucusunda kimliğini doğruladıktan ve istemci uygulamasına izin verdikten sonra, yetkilendirme sunucusu, kaynak sahibini bir yetkilendirme kodu (yetkilendirme kodu yetkilendirmesi için) veya bir erişim belirteci (örtük yetkilendirme için) ile istemci uygulamasının yönlendirme URI'sine geri yönlendirecektir. İstemci uygulaması daha sonra bu yanıtı uygun şekilde işlemelidir.
Örnek: Yetkilendirme sunucusu bir yetkilendirme kodu döndürürse, istemci uygulamasının yetkilendirme sunucusunun belirteç uç noktasına bir POST isteği yaparak bunu bir erişim belirteci ve bir yenileme belirteciyle değiştirmesi gerekir. Belirteç uç noktası tipik olarak aşağıdaki parametreleri gerektirecektir:
grant_type: Yetkilendirme türü (örneğin,authorization_code).code: Yetkilendirme sunucusundan alınan yetkilendirme kodu.redirect_uri: Yetkilendirme isteğinde kullanılan aynı yönlendirme URI'si.client_id: Yetkilendirme sunucusu tarafından verilen istemci kimliği.client_secret: Yetkilendirme sunucusu tarafından verilen istemci gizli dizisi (gizli istemciler için).
4. Korumalı Kaynaklara Erişme
İstemci uygulaması bir erişim belirteci aldıktan sonra, bunu kaynak sunucusundaki korumalı kaynaklara erişmek için kullanabilir. Erişim belirteci tipik olarak, Bearer şeması kullanılarak HTTP isteğinin Authorization başlığında bulunur.
Örnek: Bir sosyal medya platformunda bir kullanıcının profiline erişmek için, istemci uygulaması şuna benzer bir istekte bulunabilir:
GET /api/v1/me HTTP/1.1
Host: api.example.com
Authorization: Bearer [access_token]
5. Belirteç Yenilemeyi İşleme
Erişim belirteçlerinin tipik olarak sınırlı bir ömrü vardır. Bir erişim belirteci sona erdiğinde, istemci uygulaması, kaynak sahibinin uygulamayı yeniden yetkilendirmesini gerektirmeden yeni bir erişim belirteci almak için yenileme belirtecini kullanabilir. Erişim belirtecini yenilemek için, istemci uygulaması, aşağıdaki parametrelerle yetkilendirme sunucusunun belirteç uç noktasına bir POST isteği yapar:
grant_type: Yetkilendirme türü (örneğin,refresh_token).refresh_token: Yetkilendirme sunucusundan alınan yenileme belirteci.client_id: Yetkilendirme sunucusu tarafından verilen istemci kimliği.client_secret: Yetkilendirme sunucusu tarafından verilen istemci gizli dizisi (gizli istemciler için).
Güvenlik Hususları
OAuth2 güçlü bir yetkilendirme çerçevesidir, ancak kullanıcı verilerini korumak ve saldırıları önlemek için onu güvenli bir şekilde uygulamak önemlidir. İşte bazı temel güvenlik hususları:
- HTTPS Kullanın: İstemci uygulaması, yetkilendirme sunucusu ve kaynak sunucusu arasındaki tüm iletişim, dinlemeyi önlemek için HTTPS kullanılarak şifrelenmelidir.
- Yönlendirme URI'lerini Doğrulayın: Yetkilendirme kodu enjeksiyonu saldırılarını önlemek için yönlendirme URI'lerini dikkatlice doğrulayın. Yalnızca kayıtlı yönlendirme URI'lerine izin verin ve bunların düzgün şekilde biçimlendirildiğinden emin olun.
- İstemci Gizli Dizilerini Koruyun: İstemci gizli dizilerini gizli tutun. Bunları asla istemci tarafı kodunda saklamayın veya yetkisiz taraflara ifşa etmeyin.
- Durum Parametresini Uygulayın: CSRF saldırılarını önlemek için
stateparametresini kullanın. - Erişim Belirteçlerini Doğrulayın: Kaynak sunucusu, korumalı kaynaklara erişim izni vermeden önce erişim belirteçlerini doğrulamalıdır. Bu, tipik olarak belirtecin imzasını ve sona erme zamanını doğrulamayı içerir.
- Kapsamı Uygulayın: İstemci uygulamasına verilen izinleri sınırlamak için kapsamları kullanın. Yalnızca minimum gerekli izinleri verin.
- Belirteç Depolama: Belirteçleri güvenli bir şekilde saklayın. Yerel uygulamalar için, işletim sisteminin güvenli depolama mekanizmalarını kullanmayı düşünün. Web uygulamaları için güvenli çerezler veya sunucu tarafı oturumları kullanın.
- PKCE'yi (Kod Değişimi için Kanıt Anahtarı) Düşünün: Bir istemci gizli dizisini güvenli bir şekilde saklayamayan (SPA'lar ve yerel uygulamalar gibi) uygulamalar için, yetkilendirme kodu yakalama riskini azaltmak için PKCE'yi kullanın.
OpenID Connect (OIDC)
OpenID Connect (OIDC), OAuth2 üzerine inşa edilmiş bir kimlik doğrulama katmanıdır. İstemci uygulamalarının, yetkilendirme sunucusu tarafından gerçekleştirilen kimlik doğrulamasına dayalı olarak kaynak sahibinin kimliğini doğrulaması ve ayrıca birlikte çalışabilir ve REST benzeri bir şekilde kaynak sahibi hakkında temel profil bilgileri alması için standartlaştırılmış bir yol sağlar.
OAuth2 öncelikle bir yetkilendirme çerçevesi olsa da, OIDC kimlik doğrulama bileşenini ekleyerek, yalnızca kaynaklara erişimi yetkilendirmeniz değil, aynı zamanda kullanıcının kimliğini doğrulamanız gereken kullanım durumları için uygun hale getirir. OIDC, kullanıcının kimliği hakkında talepler içeren bir JSON Web Belirteci (JWT) olan bir Kimlik Belirteci kavramını sunar.
OIDC uygularken, yetkilendirme sunucusundan gelen yanıt hem bir erişim belirteci (korumalı kaynaklara erişmek için) hem de bir kimlik belirteci (kullanıcının kimliğini doğrulamak için) içerecektir.
Bir OAuth2 Sağlayıcısı Seçme
Kendi OAuth2 yetkilendirme sunucunuzu uygulayabilir veya üçüncü taraf bir sağlayıcı kullanabilirsiniz. Kendi yetkilendirme sunucunuzu uygulamak karmaşık ve zaman alıcı olabilir, ancak kimlik doğrulama süreci üzerinde tam kontrol sağlar. Üçüncü taraf bir sağlayıcı kullanmak genellikle daha basittir ve daha uygun maliyetlidir, ancak kimlik doğrulama için üçüncü bir tarafa güvenmek anlamına gelir.
Bazı popüler OAuth2 sağlayıcıları şunlardır:
- Google Kimlik Platformu
- Facebook Girişi
- Microsoft Azure Active Directory
- Auth0
- Okta
- Ping Identity
Bir OAuth2 sağlayıcısı seçerken, aşağıdaki gibi faktörleri göz önünde bulundurun:
- Fiyatlandırma
- Özellikler
- Güvenlik
- Güvenilirlik
- Entegrasyon kolaylığı
- Uyumluluk gereksinimleri (örneğin, GDPR, CCPA)
- Geliştirici desteği
Farklı Ortamlarda OAuth2
OAuth2, web uygulamalarından ve mobil uygulamalardan masaüstü uygulamalarına ve IoT cihazlarına kadar çok çeşitli ortamlarda kullanılır. Belirli uygulama ayrıntıları ortama bağlı olarak değişebilir, ancak temel kavramlar ve ilkeler aynı kalır.
Web Uygulamaları
Web uygulamalarında, OAuth2 tipik olarak belirteç değişimini ve depolamayı işleyen sunucu tarafı koduyla yetkilendirme kodu yetkilendirmesi kullanılarak uygulanır. Tek sayfalı uygulamalar (SPA'lar) için, PKCE ile yetkilendirme kodu yetkilendirmesi önerilen yaklaşımdır.
Mobil Uygulamalar
Mobil uygulamalarda, OAuth2 tipik olarak PKCE ile yetkilendirme kodu yetkilendirmesi veya OAuth2 sağlayıcısı tarafından sağlanan yerel bir SDK kullanılarak uygulanır. Erişim belirteçlerini işletim sisteminin güvenli depolama mekanizmalarını kullanarak güvenli bir şekilde saklamak önemlidir.
Masaüstü Uygulamaları
Masaüstü uygulamalarında, OAuth2, gömülü bir tarayıcı veya bir sistem tarayıcısıyla yetkilendirme kodu yetkilendirmesi kullanılarak uygulanabilir. Mobil uygulamalara benzer şekilde, erişim belirteçlerini güvenli bir şekilde saklamak önemlidir.
IoT Cihazları
IoT cihazlarında, OAuth2 uygulaması, bu cihazların sınırlı kaynakları ve güvenlik kısıtlamaları nedeniyle daha zorlu olabilir. Belirli gereksinimlere bağlı olarak, istemci kimlik bilgileri yetkilendirmesi veya yetkilendirme kodu yetkilendirmesinin basitleştirilmiş bir sürümü kullanılabilir.
Yaygın OAuth2 Sorunlarını Giderme
OAuth2 uygulaması bazen zorlu olabilir. İşte bazı yaygın sorunlar ve bunları nasıl gidereceğiniz:
- Geçersiz Yönlendirme URI'si: Yetkilendirme sunucusuna kayıtlı yönlendirme URI'sinin, yetkilendirme isteğinde kullanılan URI ile eşleştiğinden emin olun.
- Geçersiz İstemci Kimliği veya Gizli Dizisi: İstemci kimliğinin ve istemci gizli dizisinin doğru olup olmadığını iki kez kontrol edin.
- Yetkisiz Kapsam: İstenen kapsamların yetkilendirme sunucusu tarafından desteklendiğinden ve istemci uygulamasına bunlara erişme izni verildiğinden emin olun.
- Erişim Belirteci Sona Erdi: Yeni bir erişim belirteci almak için yenileme belirtecini kullanın.
- Belirteç Doğrulaması Başarısız Oldu: Kaynak sunucusunun erişim belirteçlerini doğrulamak için düzgün şekilde yapılandırıldığından emin olun.
- CORS Hataları: Çapraz Kaynak Paylaşımı (CORS) hatalarıyla karşılaşıyorsanız, yetkilendirme sunucusunun ve kaynak sunucusunun istemci uygulamanızın kaynağındaki isteklere izin verecek şekilde düzgün şekilde yapılandırıldığından emin olun.
Sonuç
OAuth2, çok çeşitli uygulamalar için güvenli ve sorunsuz kullanıcı kimlik doğrulaması sağlayan güçlü ve çok yönlü bir yetkilendirme çerçevesidir. Geliştiriciler, temel kavramları, yetkilendirme türlerini ve güvenlik hususlarını anlayarak, kullanıcı verilerini korumak ve harika bir kullanıcı deneyimi sağlamak için OAuth2'yi etkili bir şekilde uygulayabilir.
Bu kılavuz, OAuth2 uygulamasına kapsamlı bir genel bakış sağlamıştır. Daha ayrıntılı bilgi ve rehberlik için resmi OAuth2 özelliklerine ve seçtiğiniz OAuth2 sağlayıcısının belgelerine başvurmayı unutmayın. Her zaman güvenlik en iyi uygulamalarına öncelik verin ve kullanıcı verilerinin bütünlüğünü ve gizliliğini sağlamak için en son öneriler hakkında güncel kalın.